import ajax from "./request";

import { ILoginResult } from "@my/types";

// 登出方法
function handleLogout(callback: () => any) {
  wx.showModal({
    title: '退出确认',
    content: '确认要退出登录吗？',
    success: res => {
      if (res.confirm) {
        // 清除信息
        wx.removeStorageSync("token");
        wx.removeStorageSync("userInfo");
        callback();
      }
    }
  })
}

/**
 * 登录，登录信息通过回调函数传入
 * @param callback 登录成功之后的回调函数
 */
function handleLogin(callback: (userInfo: WechatMiniprogram.UserInfo) => any) {

  // let that = this;

  function login() {

    return new Promise((resolve, reject) => {
      // 获取code
      wx.login({
        success(res) {
          resolve(res);
        },
        fail(error) {
          reject(error)
        }
      })
    })
  }

  // 获取用户信息
  wx.getUserProfile({
    desc: '展示用户信息', // 声明获取用户个人信息后的用途，后续会展示在弹窗中，请谨慎填写
    success: async (res: any) => {
      console.log("用户信息：", res)


      // 模拟登录成功
      // wx.setStorageSync("token", "测试token123");
      // 登录成功后，将用户信息放入本地缓存
      // wx.setStorageSync("userInfo", res.userInfo);
      // callback(res.userInfo);

      // 获取code
      let loginRes: any;
      try {
        loginRes = await login();
      } catch {
        wx.showToast({
          title: "获取code失败",
          icon: "error",
        })
        return;
      }
      // 模拟登录参数：访问API登录接口，传递code，用户头像、昵称、地址等信息
      const data = {
        code: loginRes.code,
        nick_name: res.userInfo.nickName,
        avatar_url: res.userInfo.avatarUrl,
        gender: res.userInfo.gender,
        applicationName: 'tc'
      }
      // 进行登录
      const res2: any = await ajax("/login/wxlogin", data);
      if (res2.data.status > 0) {
        // 获取token
        const token = res2.data.result_data.token;
        // 获取token成功，将token存入本地
        wx.setStorageSync("token", token);
        // 登录成功后，将用户信息放入本地缓存
        wx.setStorageSync("userInfo", res.userInfo);
        callback(res.userInfo);
      } 
    },
  });
}

export { handleLogin, handleLogout };
